Spring Boot ์ ์ญ ์์ธ ์ฒ๋ฆฌ (Global Exception Handling)
์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ํ ๊ณณ์์ ์ฒ๋ฆฌํ๋ฉด ์ผ๊ด๋ ์๋ฌ ์๋ต์ ์ ๊ณตํ ์ ์๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค. ์คํ๋ง ๋ถํธ์์ ๊ฐ์ฅ ๊ถ์ฅ๋๋ @RestControllerAdvice ํ์ฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
1. ๊ฐ์: ๊ฐ๋ณ ์ฒ๋ฆฌ๊ฐ ์๋ ์ ์ญ ์ฒ๋ฆฌ์ ํ์์ฑ
๋ชจ๋ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ง๋ค try-catch๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ๊ณ ์ค๋ณต๋ ์ฝ๋๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์คํ๋ง์ AOP(๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ๊ธฐ์ ์ ํ์ฉํ ์ ์ญ ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
2. ๊ตฌํ ๋จ๊ณ
โ ๊ณตํต ์๋ฌ ์๋ต ๊ฐ์ฒด (Error Response)
ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ ์ผ์ ํ ํ์์ ์๋ฌ ๋ฉ์์ง ๊ฐ์ฒด๋ฅผ ์ ์ํฉ๋๋ค.
@Getter
@Builder
public class ErrorResponse {
private String code;
private String message;
private int status;
}โก ์ฌ์ฉ์ ์ ์ ์์ธ (Custom Exception)
๋น์ฆ๋์ค ๋ก์ง์ ๋ง์ถฐ ๋ค์ํ ์์ธ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ปค์คํ ์์ธ๋ฅผ ์ ์ํฉ๋๋ค.
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}โข ์ ์ญ ์์ธ ์ฒ๋ฆฌ๊ธฐ (@RestControllerAdvice)
๋ชจ๋ ์ปจํธ๋กค๋ฌ์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ๊ฐ๋ก์ฑ์ด ์ฒ๋ฆฌํ๋ ํด๋์ค์ ๋๋ค.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponse> handleUserNotFound(UserNotFoundException ex) {
ErrorResponse response = ErrorResponse.builder()
.code("USER_NOT_FOUND")
.message(ex.getMessage())
.status(HttpStatus.NOT_FOUND.value())
.build();
return new ResponseEntity<>(response, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleGeneralException(Exception ex) {
ErrorResponse response = ErrorResponse.builder()
.code("INTERNAL_SERVER_ERROR")
.message("์๋ฒ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.")
.status(HttpStatus.INTERNAL_SERVER_ERROR.value())
.build();
return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
}3. ํต์ฌ ์ฅ์
- ๋น์ฆ๋์ค ๋ก์ง ๋จ์ํ: ์ปจํธ๋กค๋ฌ์์ ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ์์ ํ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ์ผ๊ด๋ ์๋ฌ ๊ท๊ฒฉ: ๋ชจ๋ API๊ฐ ๋์ผํ JSON ์๋ฌ ํ์์ ์๋ตํ๊ฒ ๋ฉ๋๋ค.
- ์ ์ง๋ณด์ ์ฉ์ด์ฑ: ์๋ก์ด ์์ธ๊ฐ ์ถ๊ฐ๋์ด๋
GlobalExceptionHandlerํ ๊ณณ๋ง ์์ ํ๋ฉด ๋ฉ๋๋ค.
4. ์์ฝ
@RestControllerAdvice๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ปจํธ๋กค๋ฌ์ ์์ธ๋ฅผ ์ค์ ๊ด๋ฆฌํฉ๋๋ค.@ExceptionHandler๋ฅผ ํตํด ํน์ ์์ธ ํ์ ๋ณ๋ก ์๋ต์ ์ ์ํฉ๋๋ค.- ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ํ์ค ์๋ฌ ์๋ต ๊ฐ์ฒด๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํฉ๋๋ค.
์์ธ ์ฒ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ฒฌ๊ณ ํ ๋ฐฑ์๋ ์์คํ ๊ตฌ์ถ์ ์์์ ๋๋ค.